package com.server.common.logistics.postal.create;

import com.google.gson.annotations.SerializedName;
import com.server.common.logistics.request.LogisticsRequest;
import lombok.Getter;
import lombok.Setter;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

@Getter
@Setter
public class PostalCreateOrderRequest extends LogisticsRequest {

    /**
     * 用户名，授权名称--无需外部传入
     *
     * @author LXC
     * @date 2022-07-19 10:25
     */
    @SerializedName("usercode")
    private String userCode;

    /**
     * 订单
     *
     * @author LXC
     * @date 2022-07-19 10:08
     */
    private PostalOrder order;

    /**
     * 发件人信息
     *
     * @author LXC
     * @date 2022-07-19 10:08
     */
    private PostalShipper shipper;

    /**
     * 收件人信息
     *
     * @author LXC
     * @date 2022-07-19 10:09
     */
    private PostalConsignee consignee;

    /**
     * 包裹信息
     *
     * @author LXC
     * @date 2022-07-19 10:09
     */
    private List<PostalInvoice> invoice = new ArrayList<>();

    @Getter
    @Setter
    public static class PostalOrder implements Serializable {

        /**
         * 物流商产品代码
         *
         * @author LXC
         * @date 2022-07-19 10:47
         */
        @SerializedName("product_code")
        private String productCode;

        /**
         * 参考号
         *
         * @author LXC
         * @date 2022-07-20 14:35
         */
        @SerializedName("refer_hawbcode")
        private String refNo;

        /**
         * 是否带电
         *
         * @author LXC
         * @date 2022-07-20 14:35
         */
        @SerializedName("battery")
        private String battery = "0";

        /**
         * 收件人国家，国家二字简码
         *
         * @author LXC
         * @date 2022-07-20 14:35
         */
        @SerializedName("country_code")
        private String countryCode;

        /**
         * 包裹总重量（单位：kg） 限制：仅能输入最多 3 位小数并且最大 输入重量 9999.999kg 法国专线限制 0-2KG
         *
         * @author LXC
         * @date 2022-07-20 14:35
         */
        @SerializedName("order_weight")
        private BigDecimal orderWeight = new BigDecimal(0);
    }

    @Getter
    @Setter
    public static class PostalShipper implements Serializable {

        /**
         *  发件人姓名(英文)
         * @author LXC
         * @date 2022-07-20 14:20
         */
        @SerializedName("shipper_name")
        private String name;

        /**
         * 发件人省州(英文)
         * @author LXC
         * @date 2022-07-20 14:20
         */
        @SerializedName("shipper_province")
        private String province;

        /**
         * 发件人城市(英文)
         * @author LXC
         * @date 2022-07-20 14:20
         */
        @SerializedName("shipper_city")
        private String city;

        /**
         * 发件人区
         * @author LXC
         * @date 2022-07-20 14:20
         */
        @SerializedName("shipper_district")
        private String district;

        /**
         * 发件人详细地址(英文)
         * @author LXC
         * @date 2022-07-20 14:20
         */
        @SerializedName("shipper_address_detail")
        private String addressDetail;


        /**
         * 发件人电话(英文)
         * @author LXC
         * @date 2022-07-20 14:20
         */
        @SerializedName("shipper_telephone")
        private String telephone;

        /**
         * 发件人邮编(英文)
         * @author LXC
         * @date 2022-07-20 14:20
         */
        @SerializedName("shipper_postcode")
        private String postcode;

        /**
         * 国家二字简码 仅 CN
         * @author LXC
         * @date 2022-07-20 14:20
         */
        @SerializedName("shipper_countrycode")
        private String countryCode = "CN";

        /**
         * 发件人街道(英文)
         * @author LXC
         * @date 2022-07-20 14:20
         */
        @SerializedName("shipper_street")
        private String street;
    }

    @Getter
    @Setter
    public static class PostalConsignee implements Serializable {

        /**
         * 收件人姓名
         * @author LXC
         * @date 2022-07-20 14:21
         */
        @SerializedName("consignee_name")
        private String name;


        /**
         * 收件人公司名称
         * @author LXC
         * @date 2022-07-20 14:21
         */
        @SerializedName("consignee_company")
        private String company;

        /**
         * 收件人固定电话
         * @author LXC
         * @date 2022-07-20 14:21
         */
        @SerializedName("consignee_telephone")
        private String telephone;

        /**
         * 邮政编码收件人邮编
         * @author LXC
         * @date 2022-07-20 14:21
         */
        @SerializedName("consignee_postcode")
        private String postcode;

        /**
         * 城市(收件人城市)
         * @author LXC
         * @date 2022-07-20 14:21
         */
        @SerializedName("consignee_city")
        private String city;

        /**
         * 收件人省/州： 收件人省/州不可超过 64 个字符
         * @author LXC
         * @date 2022-07-20 14:21
         */
        @SerializedName("consignee_province")
        private String province;

        /**
         * 收件人联系电话
         * @author LXC
         * @date 2022-07-20 14:21
         */
        @SerializedName("consignee_mobile")
        private String mobile;

        /**
         * 收件人邮箱
         * @author LXC
         * @date 2022-07-20 14:21
         */
        @SerializedName("consignee_email")
        private String email;

        /**
         * 收件人街道/详细地址
         * @author LXC
         * @date 2022-07-20 14:21
         */
        @SerializedName("consignee_street")
        private String street;

        /**
         * 收件人地址 2
         * @author LXC
         * @date 2022-07-20 14:21
         */
        @SerializedName("consignee_street2")
        private String street2;


    }

    @Getter
    @Setter
    public static class PostalInvoice implements Serializable {

        /**
         * 产品编码
         * @author LXC
         * @date 2022-07-20 14:29
         */
        @SerializedName("sku")
        private String sku;

        /**
         * 英文名称
         * @author LXC
         * @date 2022-07-20 14:29
         */
        @SerializedName("invoice_enname")
        private String enName;

        /**
         * 中文名称
         * @author LXC
         * @date 2022-07-20 14:29
         */
        @SerializedName("invoice_cnname")
        private String cnName;

        /**
         * 海关编码
         * @author LXC
         * @date 2022-07-20 14:29
         */
        @SerializedName("hs_code")
        private String hsCode;

        /**
         * 单价(必填且格式为阿拉伯 数字和小数点，保留一位小 数，最小为 1，最大 9999；)
         * @author LXC
         * @date 2022-07-20 14:29
         */
        @SerializedName("invoice_unitcharge")
        private BigDecimal unitCharge;

        /**
         * 支付币种（默认美元） EUR=>欧元 CNY=>人民币 USD=>美元
         * @author LXC
         * @date 2022-07-20 14:29
         */
        @SerializedName("invoice_currency")
        private String currency;

        /**
         * 原产国
         * @author LXC
         * @date 2022-07-20 14:29
         */
        @SerializedName("invoice_country")
        private String country;

        /**
         * 单个商品的重量仅能输入 最多 3 位小数并且最大输 入重量 9999.999kg
         * @author LXC
         * @date 2022-07-20 14:29
         */
        @SerializedName("invoice_weight")
        private BigDecimal weight;

        /**
         * 产品数量必须为正整数
         * @author LXC
         * @date 2022-07-20 14:29
         */
        @SerializedName("invoice_quantity")
        private Integer quantity;
    }
}